home *** CD-ROM | disk | FTP | other *** search
- /* $Revision Header *** Header built automatically - do not edit! ***********
- *
- * (C) Copyright 1991 by Metalworx
- *
- * Name .....: convm3d.c
- * Created ..: Fri 13-Sep-91 13:45
- * Revision .: 0
- *
- * Date Author Comment
- * ========= ======== ====================
- * 07-Jul-91 Mtwx Created this file!
- *
- * $Revision Header ********************************************************/
- #define REVISION 0
-
- /***************************************************************************
- * convm3d.c: Programm zum Konvertieren von Molec3D-Files in Chemesthetics- *
- * Datenfiles *
- ***************************************************************************/
-
- /* ------------------------------- includes ----------------------------- */
-
- #include <ctype.h>
- #include <math.h>
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <exec/types.h>
-
- /* ------------------------------- defines ------------------------------ */
-
- #define MAXATOMS 500
-
- /* ------------------------------- global references -------------------- */
-
- char *Atom[MAXATOMS],DAtom[106][3];
- int X[MAXATOMS],Y[MAXATOMS],Z[MAXATOMS];
- double Radius[106];
-
- /* ------------------------------- external references ------------------ */
-
- extern char ProgId[],Version[],Date[]; /* from rev.c */
- extern int Revision;
-
- /* ------------------------------- prototypes --------------------------- */
-
- int main(int,char**);
- void zeile_verarbeiten(char*,int);
- void usage(void);
-
- /* ------------------------------- routines ----------------------------- */
-
- int main(int argc, char **argv)
- {
- int i,j,hradius=50,numatoms=0,numdatoms=0;
- BOOL found=FALSE;
- char zeile[82];
- FILE *edatei, *adatei, *ddatei;
-
- printf("\n%s %s/%d - %s, (C) 1991 Metalworx\n",ProgId,Version,Revision,
- Date);
- if(argc<3 || argc>4)
- {
- usage();
- exit(1);
- }
- if(argc==4)
- hradius=atoi(argv[3]);
- edatei=fopen(argv[1],"r");
- if(!edatei)
- {
- perror(argv[1]);
- exit(1);
- }
- adatei=fopen(argv[2],"w");
- if(!adatei)
- {
- perror(argv[2]);
- exit(1);
- }
- ddatei=fopen("convm3d.dta","r");
- if(!ddatei)
- {
- perror("Datafile 'convm3d.dta' not found");
- exit(1);
- }
- printf("reading");
- while(!feof(ddatei))
- {
- fgets(zeile,10,ddatei);
- zeile[strlen(zeile)-1]='\0'; /* delete \n */
- strcpy(DAtom[numdatoms],zeile);
- fgets(zeile,10,ddatei);
- Radius[numdatoms]=atof(zeile);
- numdatoms++;
- printf(".");
- }
- fclose(ddatei);
- printf("\nprocessing");
- strcpy(zeile,"");
- do
- {
- fgets(zeile,80,edatei);
- zeile_verarbeiten(zeile,numatoms);
- numatoms++;
- printf(".");
- } while(zeile[0]!='\n');
- numatoms--; /* do not take empty line ! */
-
- /* save output file */
- printf("\nwriting");
- fprintf(adatei,"%d\n",numatoms); /* save number of atoms */
- for(i=0;i<numatoms;i++)
- {
- printf(".");
- /* save atom and its coordinates */
- fprintf(adatei,"%s\n%d\n%d\n%d\n",Atom[i],X[i], Y[i],Z[i]);
- for(j=0;j<numdatoms;j++)
- {
- if(stricmp(Atom[i],DAtom[j])==NULL)
- {
- fprintf(adatei,"%d\n",(int)((Radius[j]/Radius[0])*(double)hradius));
- found=TRUE;
- }
- }
- if(!found)
- printf("Atom %s not included in convm3d.dta\n",Atom[i]);
- found=FALSE;
- }
- fprintf(adatei,"1.0\n"); /* magnification factor */
- fprintf(adatei,"0\n0\n0\n"); /* molecul turns X-Y-Z */
- fprintf(adatei,"10000.0\n-200000.0\n10000.0\n"); /* light vector */
- fprintf(adatei,"10\n"); /* reflection */
- fclose(edatei);
- fclose(adatei);
- printf("\nfinished!\n");
- exit(0);
- }
-
- void zeile_verarbeiten(char *zeile,int count)
- {
- register int i=-1,j=0;
- char Name[3];
- double x,y,z;
-
- while(isspace(zeile[++i]));
- while(isalpha(zeile[i]))
- Name[j++]=zeile[i++];
- Name[j]='\0';
- Atom[count]=malloc(3);
- strcpy(Atom[count],Name);
-
- i+=2; /* set to white space */
- while(isspace(zeile[++i]));
- x=atof(&zeile[i]);
- while(!isspace(zeile[i++]));
- while(isspace(zeile[++i]));
- y=atof(&zeile[i]);
- while(!isspace(zeile[i++]));
- while(isspace(zeile[++i]));
- z=atof(&zeile[i]);
-
- X[count]=(int)(x*100.0);
- Y[count]=(int)(y*100.0);
- Z[count]=(int)(z*100.0);
- }
-
- void usage(void)
- {
- puts("usage: convm3d <infile> <outfile> [H-radius]");
- }
-